// sgu379
// 题意：
// 有n(<=100)层楼，从下到上编号1到n，0层是停车场，初始电梯在0层。现在告诉你
// 每一层等待去停车场的人ai(sigma(ai) <= 10^9)，以及电梯的容量c(<=10^9)。
// 电梯移动一层所花时间p(<=10^9)秒，假设电梯在每一层停留以及进人、出人的时间
// 可以忽略不计，问在t(<=10^9)秒内电梯可以送最多多少人去停车场。
//
// 题解：
// 二分答案+贪心。
// 注意到如果想达到接送x人去停车场的目标，肯定是接送最下面的x人最好，并且
// 对于最下面的x个人，肯定先接送这些人中最高的时间最少（样例中就有），如果
// 某次没有接满就顺带把次高的也捎上。
//
// run: $exec < input
// opt: 0
// flag: -g
#include <iostream>
#include <algorithm>

int const maxn = 200;
long long a[maxn], need[maxn];
long long n, c, p, t;

bool judge(long long x)
{
	long long tx = x;
	for (int i = 1; i <= n; i++) {
		need[i] = std::min(a[i], tx);
		tx -= need[i];
	}
	if (tx > 0) return false;
	long long ti = 0, now = 0;
	for (int i = n; i >= 1; i--) {
		if (!need[i]) continue;
		ti += (need[i] / c) * p * i * 2;
		need[i] %= c;
		if (need[i]) {
			ti += p * i * 2;
			now = need[i];
			for (int j = i - 1; j >= 1; j--) {
				int t = std::min(need[j], c - now);
				need[j] -= t;
				now += t;
				if (now == c) break;
			}
		}
	}
	return ti <= t;
}

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> n >> c >> p >> t;
	for (int i = 1; i <= n; i++) std::cin >> a[i];
	long long l = 0, r = 2000000000;
	while (l + 1 < r) {
		long long mid = (l + r) / 2;
		if (judge(mid)) l = mid;
		else r = mid;
	}
	if (judge(r)) l = r;
	std::cout << l << "\n";
}

